"""Setup the xadmin application"""
import logging

from paste.deploy import appconfig
from pylons import config

from xadmin.config.environment import load_environment

log = logging.getLogger(__name__)

def setup_config(command, filename, section, vars):
    """Place any commands to setup xadmin here"""
    conf = appconfig('config:' + filename)
    load_environment(conf.global_conf, conf.local_conf)

    from xadmin import model
    model.metadata.drop_all(bind=config['pylons.g'].sa_engine)
    log.info("Creating tables")
    model.metadata.create_all(bind=config['pylons.g'].sa_engine)
    log.info("Successfully setup")

    log.info("Adding data ")

    project = model.Project('TestProject', 'Descripcion project test', 'Cliente project test')
    project.start = '2007-08-09'
    project.end = '2008-08-09'
    model.Session.save(project)

    alta = model.Priority('ALTA', 'ALTA')
    media = model.Priority('MEDIA', 'MEDIA')
    baja = model.Priority('BAJA', 'BAJA')
    model.Session.save(alta)
    model.Session.save(media)
    model.Session.save(baja)


    alto = model.Impact('ALTO', 'ALTO')
    medio = model.Impact('MEDIO', 'MEDIO')
    bajo = model.Impact('BAJO', 'BAJO')
    model.Session.save(alto)
    model.Session.save(medio)
    model.Session.save(bajo)
    #Creamos Tipos por defecto
    funcional = model.Type('FUNCIONAL', 'FUNCIONAL')
    nofuncional = model.Type('NO FUNCIONAL', 'NO FUNCIONAL')
    model.Session.save(funcional)
    model.Session.save(nofuncional)
    #Creamos estados por defecto
    propuesto = model.Status('PROPUESTO', 'PROPUESTO')
    aceptado = model.Status('ACEPTADO', 'ACEPTADO')
    asignado = model.Status('ASIGNADO', 'ASIGNADO')
    construido = model.Status('CONSTRUIDO', 'CONSTRUIDO')
    validado = model.Status('VALIDADO', 'VALIDADO')
    revisado = model.Status('REVISADO', 'REVISADO')
    cancelado = model.Status('CANCELADO', 'CANCELADO')
    terminado = model.Status('TERMINADO', 'TERMINADO')
    model.Session.save(propuesto)
    model.Session.save(aceptado)
    model.Session.save(asignado)
    model.Session.save(construido)
    model.Session.save(validado)
    model.Session.save(revisado)
    model.Session.save(cancelado)
    model.Session.save(terminado)
    model.Session.commit()

    from xadmin.lib.sqlalchemy_driver import UsersFromDatabase
    users = UsersFromDatabase(model)
    print "Creating tables"
    model.metadata.create_all(bind=config['pylons.g'].sa_engine)
    print "Adding users and roles"
    if not users.role_exists("delete"):
        users.role_create("delete")
    if not users.user_exists("admin"):
        users.user_create("admin", password="admin")
    users.user_add_role("admin", role="delete")

    log.info("Successfully set up")
